home *** CD-ROM | disk | FTP | other *** search
- *cN Curso de programación en assembler (II)
- *cG
- Continuamos con el curso de ensamblador del 80x86 viendo los sistemas de
- numeración usados en bajo nivel. En un principio muy lejano, se pretendió
- que los ordenadores trabajaran en decimal y se construyeron enormes máquinas
- con ruedas dentadas que no conducieron a nada. Poco más tarde a alguien se
- le ocurrió la idea de usar los principios matématicos que estudió a Boole
- para modelizar el pensamiento lógico. Bajo el nombre genérico de álgebra de
- Boole, se encuentra TODO lo que un ordenador entiende: 1 y 0.
- Sí, con la simplicidad que esto supone para los circuitos lógicos (o pasa
- corriente o no pasa) se consiguió que hoy disfrutemos en casa de maravillosas
- máquinas capaces de hacer millones de cálculos por segundo. El fundamento de
- este álgebra lo podeis encontrar en cualquier libro, ya que es una cosa que
- en este curso no tocaremos.
- Lo que si vamos a ver es como manejarla para poder entender como trabaja el
- ordenador internamente. Para ello existen las llamadas tablas de verdad que
- permiten operar con los dos elementos del álgebra. Estas tablas tienen sus
- equivalentes directas como puertas lógicas (componentes electrónicos) que se
- verán más adelante en un futuro curso de robótica.
- La operación más sencilla que existe es la negación que asigna 1 al 0 y
- 0 al 1. Su tabla de verdad es muy sencilla:
- *cA
- - 1 0
- ----
- 0 1
- *cG
- El negador se suele representar por un barra encima del elemento a negar.
- La tabla de verdad de OR hace lo que su nombre indica, resulta 1 si un
- elemento O el otro está a 1, sino se pone a 0:
- *cA
- 1 1 0 0
- + 1 0 1 0
- ----------
- 1 1 1 0
- *cG
- La tabla de verdad de AND es también obvia, se pone a 1 cuando los dos
- elementos estan a 1:
- *cA
- 1 1 0 0
- * 1 0 1 0
- ----------
- 1 0 0 0
- *cG
- La última tabla de verdad que veremos es la XOR que ya no es tan obvia. La
- operación XOR devuelve 1 en los pares de bits en que uno es 0 y el otro es 1,
- su nombre es OR exclusivo porque excluye cuando los dos estan a 1:
- *cA
- 1 1 0 0
- o 1 0 1 0
- ----------
- 0 1 1 0
- *cG
- Estas tablas se corresponden con las expresiones que nosotros utilizamos en
- la realidad, por ejemplo cuando decimos "me voy a comer una manzana y una
- pera" esto es cierto cuando te comes una manzana y te comes una pera, pero
- no cuando sólo te comes una fruta.
- Pues esto tan sencillo o complicado es todo lo que entienden los ordenadores.
- Para representar un número se utiliza el sistema binario que es básicamente
- como el decimal, pero con menos referentes. Así el 12 en binario se escribiria
- como una ristra de unos y ceros, concretamente 1100. Al igual que en decimal
- un 0 a la izquierda no tiene ningún valor.
- El problema es, ¿como transformar de binario a decimal? La pregunta es, hoy
- en dia, trivial: con una calculadora. Pero vamos a ver como se debe de hacer
- a mano para después ser capaces de programar esa hipotética calculadora. En
- primer lugar recordar que los dígitos en todos los sistemas de representación
- que usemos tienen un peso o valor dependiente de la posición que ocupen en la
- secuencia. Teniendo en cuenta esto último, sólo es necesario conocer ese peso
- para poder calcular los valores de los número en binario. Este peso es muy
- sencillo de calcular y es completamente análogo al sistema decimal, cada bit,
- comenzando por el de más a la derecha, tiene un valor de 2 (la base) elevado
- a el número de posición que ocupa. En un byte (agrupación de 8 bits) los pesos
- serian 128-64-32-16-8-4-2-1, y para una word (2 bytes) se seguiria elevando
- el peso de cada bit y la suma de todos resultaria el valor del byte o word.
- Ahora que ya sabemos transformar de binario, nos hace falta algo que permita
- trabajar sin perder de vista los unos y ceros y que sea más manejable (para
- representar un millón necesitamos escribir 20 cifras). Este elemento será el
- sistema hexadecimal, un sistema númerico que se representa mediante 16
- símbolos que son: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. Si encontramos un elemento
- libre este representará el valor que parece más lógico: A=10, B=11 C=12,...
- El álgebra de este sistema es equivalente al decimal y el binario y todo lo
- expuesto anteriormente para el binario es válido para el hexa. Lo interesante
- de este sistema es que si aqrupamos 4 bits, estos se corresponden directamente
- con un símbolo hexa y viceversa. Si por ejemplo tenemos el número 43 en decimal
- y lo queremos pasar a hexa, podemos pasarlo a binario primero y luego a hexa:
- 101011 en binario, lo agrupamos 0010 1011 y queda como 2-11 que es 2B en el
- sistema hexadecimal. No insistiré más sobre este tema, si es necesario podeis
- consultar algún buen libro de matemática discreta o simplemente compraros el
- mejor libro para aprender ensamblador: "El ensamblador de 80x86" de Anaya que
- por muy poco dinero (1500 pelas) os introducirá en todo lo que rodea al PC.
- *cN
- Visión general de la familia 80x86
- *cG
- El procesador 8086 fue el primer gran éxito comercial de Intel. Vió la luz
- hacia mediados de los '70 y desde su nacimiento se presento como procesador
- para ordenadores domesticos, aunque por su alto precio tardó en llegar a ser
- lo que hoy es. Mientras las empresas como Amstrad, Spectrum y demás copaban
- el mercado domestico con procesadores Z80 de 8 bits, los ingenieros de Intel
- ya tenian la vista puesta en metas más altas y por ello construyeron este
- procesador de 16 bits que disponia un bus de 20 bits que le "limitaban"
- a un mega (de RAM, claro). Esto último, esta gran limitación hoy dia, entonces
- era una cantidad tan exageradamente grande como puede parecernos ahora que
- nuestro PC pudiera equiparse con 4 gigas (quien sabe, tal vez en un futuro
- esto nos parezca poco).
- Al 8086 le siguieron el 8088 que fue un intento de abaratar los costes del
- primero de la familia y que por lo tanto era netamente inferior; el 80186 y
- 80188 que prácticamente pasaron desapercibidos ya que no incorporaban ningún
- elemento novedoso, simplemente eran 8086 más rápidos; el 80286 que fue una
- gran mejora respecto a su antecesor ya que incorporaba un bus de direcciones
- de 24 bits con lo que manejaba hasta 16 megas y además incorporaba un nuevo
- modo de procesador llamado "protegido" que permitia mayor libertad al progra-
- mador; el revolucionario 80386 marcó una época ya que incorporaba registros
- de 32 bits en contraposición con los anteriores procesadores, así como un
- nuevo modo llamado "virtual" con el que se podian emular varias máquinas
- corriendo pseudo-simultaneamente y con su bus de 32 bits se alcanzaba la
- increible cantidad de 4Gbytes de RAM; el 80486 SX y DX que a parte de no
- incorporar nada nuevo, marearon a los no-iniciados con los relojes doblados
- y triplicados y las vertiente SX (más mala) y DX (con copro integrado); el
- Pentium que fue casi tan retrasado como el Güindows 95 a causa de sus
- recalentamientos ya que era un procesador muy avanzado (unos 5 millones de
- transistores) y que ya incorpora funcionalidades de Work Station al permitir
- la ejecución paralela (pipeline) pudiendose ejecutar 2 instrucciones por ciclo
- y permitiendo ver los primeros PC biprocesador; y el jovencito de la familia,
- llamado Pentium Pro (no por ser una versión "profesional" como apuntan algunos)
- y que da el paso definitivo hacia la equiparación de los equipos PC con los
- main frames y work station.
- Después de este pequeño repaso de los procesadores el siguiente paso será
- comenzar a programar, pero ¿para cual de todos? ¿Y porqué no lo hacemos para
- todos a la vez? Sí, la compatibilidad descendente que ha proporcionado Intel
- ha sido la clave del éxito de los 80x86 y por ende del PC. Sin esa compatibi-
- lidad no podriamos hacer un programa para un 386 y luego ampliar el equipo a
- Pentium lo que resultaria un gran fracaso económico para las compañias que
- tuvieran que pagar a los programadores (y que seguramente migrarian a otras
- plataformas). Aprovechándonos de la compatibilidad decreciente comenzaremos
- en el próximo número a ver las instrucciones de los procesadores más sencillos
- de la familia (8086 a 80286) y haremos nuestro primer programa en assembler,
- hasta entonces pasadlo bien.
- *cL
- Navi Dj.
-